﻿using System;
using System.Collections.Generic;
using NReader.Model.RAS;
using NReader.Service;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using XnReader.WinRT.Common;
using XnReader.WinRT.Helper;

// “搜索合同”项模板在 http://go.microsoft.com/fwlink/?LinkId=234240 上提供

namespace XnReader.WinRT
{
    //
    // 以下代码无法自动添加到应用程序子类，
    // 因为找不到合适的类或已存在具有
    // 相同名称的方法。请通过显示对指定的搜索词的搜索结果来确保
    // 合适的代码处理激活。
    //
    //         /// <summary>
    //         /// 在激活应用程序以显示搜索结果时调用。
    //         /// </summary>
    //         /// <param name="args">有关激活请求的详细信息。</param>
    //         protected async override void OnSearchActivated(Windows.ApplicationModel.Activation.SearchActivatedEventArgs args)
    //         {
    //             // 事件，以在应用程序运行后加快搜索
    // 
    //             // 如果窗口尚未使用框架导航，则插入我们自己的框架
    //             var previousContent = Window.Current.Content;
    //             var frame = previousContent as Frame;
    // 
    //             // 如果应用程序不包含顶级框架，则可能表示这是
    //             // 初次启动应用程序。一般而言，此方法和 App.xaml.cs 中的 OnLaunched 
    //             // 可调用公共方法。
    //             if (frame == null)
    //             {
    //                 // 创建要充当导航上下文的框架，并将其与
    //                 // SuspensionManager 键关联
    //                 frame = new Frame();
    //                 XnReader.WinRT.Common.SuspensionManager.RegisterFrame(frame, "AppFrame");
    // 
    //                 if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
    //                 {
    //                     // 仅当适用时还原保存的会话状态
    //                      try
    //                     {
    //                         await XnReader.WinRT.Common.SuspensionManager.RestoreAsync();
    //                     }
    //                     catch (XnReader.WinRT.Common.SuspensionManagerException)
    //                     {
    //                         //还原状态时出现问题。
    //                         //假定没有状态并继续
    //                     }
    //                 }
    //             }
    // 
    //             frame.Navigate(typeof(Search), args.QueryText);
    //             Window.Current.Content = frame;
    // 
    //             // 确保当前窗口处于活动状态
    //             Window.Current.Activate();
    //         }
    /// <summary>
    /// 此页显示全局搜索定向到此应用程序时的搜索结果。
    /// </summary>
    public sealed partial class Search
    {
        private SearchArticleListPage<ArticleInfo> _articleList;

        public Search()
        {
            InitializeComponent();
            var toolBar = new ToolBarInfo
            {
                VisibleSearch = Visibility.Visible
            };
            tlBottom.DataContext = toolBar;
        }

        /// <summary>
        /// 使用在导航过程中传递的内容填充页。在从以前的会话
        /// 重新创建页时，也会提供任何已保存状态。
        /// </summary>
        /// <param name="navigationParameter">最初请求此页时传递给
        /// <see cref="Frame.Navigate(Type, Object)"/> 的参数值。
        /// </param>
        /// <param name="pageState">此页在以前会话期间保留的状态
        /// 字典。首次访问页面时为 null。</param>
        protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
            try
            {
                var queryString = navigationParameter.ToString();
                var count = await ArticleService.Instance().SearchArticleListCount(queryString);
                txtResult.Text = string.Format("搜索与 \"{0}\" 相关的小说共有 {1} 本", queryString, count);
                _articleList = new SearchArticleListPage<ArticleInfo>((uint)count, queryString);
                cvsArticleList.Source = _articleList;
            }
            catch (Exception)
            {
                var md = new MessageDialog("查询失败.请检查您的网络链接是否正确");
                md.ShowAsync();
                //throw;
            }
            
        }

        /// <summary>
        /// 保留与此页关联的状态，以防挂起应用程序或
        /// 从导航缓存中放弃此页。值必须符合
        /// <see cref="SuspensionManager.SessionState"/> 的序列化要求。
        /// </summary>
        /// <param name="pageState">要使用可序列化状态填充的空字典。</param>
        protected override void SaveState(Dictionary<String, Object> pageState)
        {
        }

        private void ItemGridViewItemClick(object sender, ItemClickEventArgs e)
        {
            if (e.ClickedItem != null)
            {
                int articleid = ((ArticleInfo)e.ClickedItem).articleid;
                Frame.Navigate(typeof(Book), articleid);
            }
        }
    }
}
